Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ActionMenu: Fix keyboard navigation for ActionMenu inside Overlay #2266

Merged
merged 10 commits into from
Aug 31, 2022

Conversation

siddharthkp
Copy link
Member

@siddharthkp siddharthkp commented Aug 24, 2022

Notes for reviewer:

I had removed focus trap in #2024 as redundant, because we handle keyboard interactions already. released in v35.6.0

I found a use case where focus trap can't be removed - when ActionMenu is inside a focus trap (like AnchoredOverlay), keyboard navigation of ActionMenu would get hijacked by the parent focus trap. Re-introducing focus trap solves this issue.

Is this change safe?

Tested this change in memex (https://github.com/github/memex/pull/11620), one failed test (expected, caused by bringing back focus trap 👍).

Are there any edge cases?

Known issue: Pressing Tab on an open menu closes the menu and put the focus back on the anchor instead of the next element because it "returns" to the parent focus trap. I didn't find a way to communicate to the parent focus trap to move focus to the next tabbable element :(

Unrelated change

Consumer tests are failing on this PR, any ideas?


Details:

Fixes keyboard navigation for the menu in memex project settings (private project)

before:

before-2266.mov

after:

after-2266.mov

Accessibility

There is overlap between keyboard navigation of Overlay's focus trap and Menu's focus trap inside it, not sure what the ideal behavior is.

Asked on the accessibility channel (private github slack), For overlays with forms, we should use Tabs bindings not ArrowKeys (memex already does that, so we're good!)

video
tabs-focus-trap.mov

Long term: we should look in to the defaults and recommended component for overlays. AnchoredOverlay is pretty low level, we need to improve Dialog (with focus trap with Tab bindings) and make that the recommended component.


scenarios & video for a11y issues

Default scenario: AnchoredOverlay's focus trap has bindings for ArrowKeys (not Tabs), (see story for running example)

https://github.slack.com/archives/C0FSWLQ0Y/p1661507974126029

  1. Pressing ArrowDown on menu button will not open the menu, but move focus to the next element
  2. Pressing Tab on an open menu will close the menu and put the focus back on the anchor instead of the next element (the parent Overlay's focus trap is using ArrowKeys for navigation, not Tab)

Customised scenario in memex: AnchoredOverlay's focus trap has bindings for Tabs,

  1. Pressing Tab on an open menu will close the menu and put the focus back on the anchor instead of the next element
tabs-focus-trap.mov

@changeset-bot
Copy link

changeset-bot bot commented Aug 24, 2022

🦋 Changeset detected

Latest commit: 062ff87

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@primer/react Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@github-actions
Copy link
Contributor

github-actions bot commented Aug 24, 2022

size-limit report 📦

Path Size
dist/browser.esm.js 76.25 KB (-0.02% 🔽)
dist/browser.umd.js 76.86 KB (-0.02% 🔽)

@siddharthkp siddharthkp temporarily deployed to github-pages August 24, 2022 14:14 Inactive
@siddharthkp siddharthkp temporarily deployed to github-pages August 24, 2022 14:42 Inactive
@siddharthkp siddharthkp temporarily deployed to github-pages August 24, 2022 20:46 Inactive
@siddharthkp siddharthkp temporarily deployed to github-pages August 25, 2022 13:22 Inactive
@siddharthkp siddharthkp changed the title ActionMenu: Re-enable focus trap ActionMenu: Fix keyboard navigation for ActionMenu inside Overlay Aug 25, 2022
@siddharthkp siddharthkp temporarily deployed to github-pages August 25, 2022 14:33 Inactive
@siddharthkp siddharthkp marked this pull request as ready for review August 29, 2022 09:25
@siddharthkp siddharthkp requested review from a team, mperrotti and colebemis and removed request for mperrotti August 29, 2022 09:25
@siddharthkp siddharthkp marked this pull request as draft August 29, 2022 09:29
@siddharthkp siddharthkp temporarily deployed to github-pages August 29, 2022 09:45 Inactive
@siddharthkp siddharthkp marked this pull request as ready for review August 29, 2022 10:16
@siddharthkp siddharthkp temporarily deployed to github-pages August 29, 2022 10:22 Inactive
@siddharthkp siddharthkp temporarily deployed to github-pages August 31, 2022 09:59 Inactive
@siddharthkp siddharthkp merged commit 4cc6e52 into main Aug 31, 2022
@siddharthkp siddharthkp deleted the sid/actionmenu-in-focuszone branch August 31, 2022 10:05
@primer-css primer-css mentioned this pull request Aug 31, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants